<!doctype html><html lang="en-us"><head><meta charset="utf-8"></head>
<body>
<script>
  function script(url) {
    return new Promise((resolve, reject) => {
      var s = document.createElement('script');
      s.src = url;
      s.onload = function() {
        var code = EmscriptenCode; // Capture the js/asm.js content from global scope to a local variable
        delete EmscriptenCode;
        resolve(code);
      };
      document.body.appendChild(s);
    });
  }

  // Verify that browser script onload() happens tightly after it has evaluated the page, so that no other
  // event handlers have a chance to get in between. (add event handlers that try to race to get in between)
  setInterval(function(){ EmscriptenCode = null; }, 0);
  setInterval(function(){ EmscriptenCode = null; }, 0);
  setInterval(function(){ EmscriptenCode = null; }, 0);
  setInterval(function(){ EmscriptenCode = null; }, 0);

  var asmJs = script('a.asm.js');
  var js = script('a.js');
  Promise.all([asmJs, js]).then((result) => {
    var asmJs = result[0];
    var js = result[1];
    var emscriptenModuleConfig = {
      asm: asmJs,
      /* other Emscripten module configuration go here */
      inputData: 1
    };

    // Run the page
    js(emscriptenModuleConfig);

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:8888/report_result?' + emscriptenModuleConfig.weHaveExecutedSomeCCode);
    xhr.send();
    setTimeout(function() { window.close() }, 1000);
  });
</script>
</body>
</html>
